package com.twq.collection.list.firstorder

/**
 * Created by tangweiqun on 2017/12/10.
 */
object First {
  def main(args: Array[String]): Unit = {
    //1、Concatenating two lists 两个list进行拼接
    List(1, 2) ::: List(3, 4, 5)

    //2、Taking the length of a list: length
    List(1, 2, 3).length
    //length是一个相对比较耗时的操作，因为需要循环遍历整个list找到最后一个元素，才能确定长度
    //因此，随着List中元素个数的增加，这个方法的时间会随之增长
    //所以，如果你想测试一个List是否为空的时候，最好使用：
    List(1, 2, 3).isEmpty
    //而不是：
    List(1, 2, 3).length

    //size方法和length方法是一样的，size的方法就是length实现的
    List(1, 2, 3).size

    //3、Accessing the end of a list: init and last
    //和head和tail相反的两个方法
    val abcde = List('a', 'b', 'c', 'd', 'e')
    abcde.last //获取list的最后一个元素
    abcde.init //获取除了最后一个元素的所有元素列表

    //head和tail消耗的时间都是常数，而last和init方法需要遍历整个list，所以消耗的时间随着List元素的增加而增加
    //建议写代码的时候尽量使用head和tail

    //4、当我们需要不断的访问List中的后面的元素的时候，我们可以利用reverse方法将List翻转
    abcde.reverse //将生成一个新的List，原来的List abcde将不变

    //对一个List reverse两次的List与原始List相等
    abcde.reverse.reverse == abcde
    //对一个List进行reverse后，翻转后init等于翻转前tail的reverse
    abcde.reverse.init equals abcde.tail.reverse
    abcde.reverse.tail equals abcde.init.reverse
    abcde.reverse.head equals abcde.last
    abcde.reverse.last equals abcde.head
  }
}
